"use strict";
{
    class Stack {
        constructor() {
            this.dataStore = [];
            this.top = 0;
        }
        /**
         * 这里之所以要使用 getter 其实是为了语义
         *  这个实际上是一个计算属性
         *  我们当然也可以使用 length() 方法来进行操作，但是就与显示情况不相符
         *  length 明显是一个属性 如果是 getLength那么还有可能是一个方法，
         *  所以这里就是一个  getter 和 setter的一个比较不错的使用场景
         */
        get length() {
            return this.dataStore.length;
        }
        // 入栈方法
        push(element) {
            this.dataStore.push(element);
            this.top++;
        }
        // 出栈方法
        pop() {
            // 数组的pop()方法就是删除数组的最后一个元素
            if (this.dataStore.length !== 0) {
                this.top--;
                // console.log("2222");
                return this.dataStore.pop();
            }
        }
        // 返回栈顶元素
        peek() {
            // console.log(111, this.dataStore, this.top);
            return this.dataStore[this.top - 1];
        }
        // 清空栈
        clear() {
            this.top = 0;
            this.dataStore.length = 0;
        }
    }
    // 基本测试代码
    let user = new Stack();
    user.push("Jimmy");
    user.push("xuexue");
    user.push("Jack");
    console.log("peek", user.peek());
    console.log("pop", user.pop());
    console.log("clear", user.clear());
    console.log("peek", user.peek());
    user.push("红宝书");
    console.log("peek", user.peek());
    console.log(user.length);
    // 进制转换
    const mulBase = (num, base) => {
        let s = new Stack();
        do {
            s.push(num % base);
            num = Math.floor((num /= base));
        } while (num > 0);
        let cinverted = "";
        while (s.length > 0) {
            cinverted += s.pop();
        }
        return cinverted;
    };
    var newNum = mulBase(32, 2);
    console.log(newNum);
    // 是否回文字符串
    const isPalindrome = (word) => {
        let s = new Stack();
        for (let i = 0; i < word.length; i++) {
            s.push(word[i]);
        }
        let rword = "";
        while (s.length > 0) {
            rword += s.pop();
        }
        return word === rword;
    };
    console.log(isPalindrome("hello"));
    console.log(isPalindrome("racecar"));
}
